import axios, { AxiosResponse } from 'axios'
import { Toast } from 'vant';
import 'vant/es/toast/style';
import { tokenUrl } from '@/token/tokenUrl'
// import { localStorage } from '@/utils/local-storage'
// import { STORAGE_TOKEN_KEY } from '@/stores/mutation-type'

// 这里是用于设定请求后端时，所用的 Token KEY
// 可以根据自己的需要修改，常见的如 Access-Token，Authorization
// 需要注意的是，请尽量保证使用中横线`-` 来作为分隔符，
// 避免被 nginx 等负载均衡器丢弃了自定义的请求头
export const REQUEST_TOKEN_KEY = 'Access-Token'

// 创建 axios 实例
const request = axios.create({
  // API 请求的默认前缀
  baseURL: 'http://www.kangliuyong.com:10002',
  timeout: 10000, // 请求超时时间
})


// 异常拦截处理器
const errorHandler = (error: any): any => {
  return Promise.reject(error)
}

// let load = null

// 请求拦截器
const requestHandler = (config: any):any => {
  const savedToken = localStorage.getItem('token')

  const appkey: string = 'U2FsdGVkX19WSQ59Cg+Fj9jNZPxRC5y0xB1iV06BeNA=';
  // 如果 token 存在
  // 让每个请求携带自定义 token, 请根据实际情况修改
  //处理请求的公共参数
  if (config.method === 'get') {
    config.params = config.params || {};
    config.params.appkey = appkey;

    if (tokenUrl.indexOf((<any>config).url) > -1) {
      config.params.tokenString = savedToken;
    }

  } else if (config.method === 'post') {
    config.data = config.data || {};

    if (tokenUrl.indexOf((<any>config).url) > -1) {
      config.data.tokenString = savedToken;
    }

    //序列化post请求参数
    let dataParams: string = '';
    for (let key in config.data) {
      dataParams += `${key}=${config.data[key]}&`
    }
    dataParams += `appkey=${appkey}`;

    config.data = dataParams;

  }
  // let load = null

  Toast.loading({
    message: '加载中...',
    //禁止穿透点击
    forbidClick: true,
    loadingType: 'spinner',
    //不会自动关闭提示
    duration: 0
  })

  return config;
}

// Add a request interceptor
request.interceptors.request.use(requestHandler, errorHandler)

// 响应拦截器
const responseHandler = (res: any): any => {
  //res: 服务器响应数据
  // 

  //关闭加载提示
  Toast.clear();

  return res;
}

// Add a response interceptor
request.interceptors.response.use(responseHandler, errorHandler)

export { AxiosResponse }

export default request
